package modele;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collection;

import controleur.Simulateur;
import modele.entites.MapEntite;
import modele.simulation.Statistiques;

public class Interface  {

	private String path;

	public void saveSimulation(Simulateur s){
		try {

			//hierarchisation des fichiers
			Collection<MapEntite> me = s.getMapEntites();
			//Simulateur simulationMere = this.loadSimulation(s.getPathSimulationMere());
			if(s.getPathSimulationMere() == null){ //Premiere sauvegarde de la simulation
                s.setPathSimulateur(s.getPathSimulateur()+"\\"+s.getNomSimulateur()+"\\");
                s.setNomSimulateur(s.getNomSimulateur());
				path = s.getPathSimulateur();
                System.out.println("path : " + path);
				File dir = new File (path);
				dir.mkdirs();
			}
			//else if(this.loadSimulation(s.getPathSimulationMere()).getMapEntites().removeAll(me)){ // Autre lancement avec changement des parametres de la simulation
			//	path = s.getPathSimulateur()+"\\"+s.getNomSimulateur()+"\\modification du"+new SimpleDateFormat("yyyy.MM.dd" )+"\\";
			//	File dir = new File (path);
            //    System.out.println("change_path : " + path);
			//	dir.mkdirs();
			//}
            else{ // Autre lancement sans changement des parametres de la simulation

                s.setPathSimulateur(s.getPathSimulateur()+"\\"+s.getNomSimulateur()+"\\");//rustine
                s.setNomSimulateur(s.getNomSimulateur());//rustine
                path = s.getPathSimulateur();//normalement déjà setter la premiere fois... mais bon

                System.out.println("other_time_path : " + path);
			}
            s.setFinalPath(s.getNomSimulateur()+"-" + s.getTempsSimulateur()+"s.simulation");
			path += s.getFinalPath();
            System.out.println("gived path : " + path);
			ObjectOutputStream outSimulation = new ObjectOutputStream (new FileOutputStream (path));                 
			//Attention l'odre doit etre respecter en entre et sorti
			outSimulation.writeObject(me);
			outSimulation.writeObject(s.getNomSimulateur());
			outSimulation.writeObject(path);
			outSimulation.writeObject(s.getPathSimulationMere());
			outSimulation.writeObject(s.getStats());
			outSimulation.close();

		} catch (IOException e) {
			e.printStackTrace();
		}

	}
	
	public Simulateur loadSimulation(String path){
		
		try {
            System.out.println("function_load_path : " + path);
			FileInputStream fichier = new FileInputStream(path);
			ObjectInputStream ois = new ObjectInputStream(fichier);
			Simulateur s = new Simulateur();
			s.setMapEntites((ArrayList<MapEntite>) ois.readObject());
			s.setNomSimulateur((String) ois.readObject());
			s.setPathSimulateur((String) ois.readObject());
			s.setPathSimulationMere( (String) ois.readObject());
			s.setStats((Statistiques) ois.readObject()); 
			ois.close();
			return s;

		} catch (IOException | ClassNotFoundException e) {

			e.printStackTrace();

		}

        return null;
	}
}